home *** CD-ROM | disk | FTP | other *** search
- /* ddir.c: Remove directory tree */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <io.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <assert.h>
-
- /* All POSIX-compliant systems have this one */
- #include <dirent.h>
-
- /* Borland C also requires this one */
- #include <dir.h>
-
- /* This is required to redirect stderr on DOS */
- #include "stderr.h"
-
- /* DOS-specific macros - change for other OS */
- #define CMD_FORMAT "del *.* <%s > nul"
- #define CMD_LEN 17
-
- /* Change this to "/" for UNIX */
- char Response_file[L_tmpnam+1] = "\\";
-
- void rd(char *);
-
- main(int argc, char **argv)
- {
- FILE *f;
- char *old_path = getcwd(NULL,FILENAME_MAX);
-
- /* Create response file for DOS del command */
- tmpnam(Response_file+1);
- assert((f = fopen(Response_file,"w")) != NULL);
- fputs("Y\n",f);
- fclose(f);
-
- /* Delete the directories */
- while (--argc)
- rd(*++argv);
-
- /* Clean-up */
- remove(Response_file);
- chdir(old_path);
- free(old_path);
- return 0;
- }
-
- void rd(char * dir)
- {
- char sh_cmd[L_tmpnam+CMD_LEN];
- DIR *dirp;
- struct dirent *entry;
- struct stat finfo;
-
- /* Log onto the directory that is to be deleted */
- assert(chdir(dir) == 0);
- printf("%s:\n",strlwr(dir));
-
- /* Delete all normal files via OS shell */
- hide_stderr();
- sprintf(sh_cmd,CMD_FORMAT,Response_file);
- system(sh_cmd);
- restore_stderr();
-
- /* Delete any remaining directory entries */
- assert((dirp = opendir(".")) != NULL);
- while ((entry = readdir(dirp)) != NULL)
- {
- if (entry->d_name[0] == '.')
- continue;
- stat(entry->d_name,&finfo);
- if (finfo.st_mode & S_IFDIR)
- rd(entry->d_name); /* Subdirectory */
- else
- {
- /* Enable delete of file, then do it */
- chmod(entry->d_name,S_IWRITE);
- assert(unlink(entry->d_name) == 0);
- }
- }
- closedir(dirp);
-
- /* Remove the directory from its parent */
- assert(chdir("..") == 0);
- assert(rmdir(dir) == 0);
- }
-
-
-